[初心者向け]Terraformで既存リソースを取得する2つの方法
こんにちは、ゲームソリューション部のsoraです。
今回は、[初心者向け]Terraformで既存リソースを取得する2つの方法ついて書いていきます。
初心者向けの内容ですが、意外と情報を探すのに苦労した話を聞いたため書いていきます。
importコマンド
importコマンドで.tfstate
ファイルに反映させる方法です。
まず空のリソースブロックを記載します。
resource aws_vpc vpc { }
次に以下コマンドで対象のリソースを指定して実行します。
terraform import aws_vpc.vpc [VPC_ID] # 別ディレクトリにある場合 terraform import [ディレクトリ名].aws_vpc.vpc [VPC_ID]
コマンドを実行すると、.tfstate
ファイルに既存リソースの情報が反映されているため、その情報をもとにデフォルトと差分があるパラメータを.tf
ファイルに記述します。
resource aws_vpc vpc { cidr_block = "10.x.0.0/16" tags = {Name = "xxxx"} }
最後に、planを実行して差分がないことを確認します。
$ terraform plan aws_vpc.vpc: Refreshing state... [id=vpc-xxxxxx] No changes. Your infrastructure matches the configuration.
この方法について、インポート対象のリソースは少ない場合には良いのですが、複数インポートしたい場合には、リソースに対して1つずつ実行していく必要があるため不便です。
そのため、複数リソースのインポートをしたい場合には、次の方法がおすすめです。
importブロック
importブロックを記述して.tfstate
ファイルに反映させる方法です。
import { # リソースの識別子(今回はVPC ID) id = "vpc-xxxxxx" # インポートするリソースブロック to = aws_vpc.vpc } resource aws_vpc vpc { cidr_block = "10.x.0.0/16" tags = {Name = "xxxx"} }
planを実行するとimportが1つ実行されることがわかります。
applyでimportを実行した後は先ほどのimportブロックは削除しても問題ありません。
$ terraform plan Plan: 1 to import, 0 to add, 0 to change, 0 to destroy. $ terraform apply Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed.
この方法は、importコマンドとは異なり、一度に複数のリソースをimportできるため、基本的にはこちらの方法を利用することが多いと思います。
ただし、1,2個のリソースであればimportコマンドの方が楽に感じるときもあるかもしれません。
最後に
今回は、[初心者向け]Terraformで既存リソースを取得する2つの方法を記事にしました。
どなたかの参考になると幸いです。